﻿<!DOCTYPE HTML>
<html>
<head>
  <script type="application/javascript" src="pc.js"></script>
  <script type="text/javascript" src="../../test/manifest.js"></script>
</head>
<body>
<pre id="test">
<script type="application/javascript;version=1.8">
var manager = new MediaTestManager;

createHTML({
  bug: "1081409",
  title: "Captured video-only over peer connection",
  visible: true
}).then(() => new Promise(resolve => {
  manager.runTests(getPlayableVideos(gLongerTests), startTest);
  manager.onFinished = () => {
    // Tear down before SimpleTest.finish.
    if ("nsINetworkInterfaceListService" in SpecialPowers.Ci) {
      getNetworkUtils().tearDownNetwork();
    }
    resolve();
  };
}))
.catch(e => ok(false, "Unexpected " + e + ":\n" + e.stack));

// Run tests in sequence for log readability.
PARALLEL_TESTS = 1;

function startTest(media, token) {
  manager.started(token);
  var video = document.createElement('video');
  video.id = "id_" + media.name;
  video.width = 160;
  video.height = 120;
  video.muted = true;
  video.loop = true;
  video.preload = "metadata";
  video.src = "../../test/" + media.name;

  document.getElementById("content").appendChild(video);

  var test;
  new Promise((resolve, reject) => {
    video.onloadedmetadata = resolve;
    video.onerror = () => reject(video.error);
  })
  .then(() => {
    video.onerror = () => ok(false, media.name + " failed in playback (code=" +
                             video.error.code + "). Stream should be OK. " +
                             "Continuing test.");
    return runNetworkTest(() => {
      var stream = video.mozCaptureStream();
      test = new PeerConnectionTest({ config_local: { label_suffix: media.name },
                                      config_remote: { label_suffix: media.name } });
      test.setOfferOptions({ offerToReceiveVideo: false,
                             offerToReceiveAudio: false });
      var hasVideo = stream.getVideoTracks().length > 0;
      var hasAudio = stream.getAudioTracks().length > 0;
      test.setMediaConstraints([{ video: hasVideo, audio: hasAudio }], []);
      test.chain.replace("PC_LOCAL_GUM", [
        function PC_LOCAL_CAPTUREVIDEO(test) {
          test.pcLocal.attachLocalStream(stream);
          video.play();
        }
      ]);
      return test.chain.execute();
    });
  })
  // Handle both MediaErrors (with the `code` attribute) and other errors.
  .catch(e => ok(false, "Error (" + e + ")" +
                        (e.code ? " (code=" + e.code + ")" : "") +
                        " in test for " + media.name +
                        (e.stack ? ":\n" + e.stack : "")))
  .then(() => test && test.close())
  .then(() => {
    removeNodeAndSource(video);
    manager.finished(token);
  })
  .catch(e => ok(false, "Error (" + e + ") during shutdown."));
};

</script>
</pre>
</body>
</html>
